package com.qili.quartz;

import com.qili.entity.supervisor.SupervisorFile;
import com.qili.mapper.it.ItDicMapper;
import com.qili.mapper.it.ItFileMapper;
import lombok.extern.slf4j.Slf4j;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Author LiJingQiang
 * @data 2022/5/16 10:26
 * @description 智能检索：知识库统计 （重写）
 *
 * 定时器任务： 处理 supervisor_file 表中的关系，给 search_key 添加id路径
 * search_key ： 用,分割父辈id
 *
 * supervisor_file 表中关系
 * 当前id ： id
 * 父id : superiorId
 *
 * 现添加字段 search_key : 该字段存储从根节点到节点的标识路径
 *
 *
 *
 */
@Slf4j
public class SupervisorFileQuartz implements Job {

    @Autowired
    ItDicMapper itDicMapper;

    @Autowired
    ItFileMapper itFileMapper;


    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        System.out.println("处理 supervisor_file 库结构开始执行=======================");
        long startTime = System.currentTimeMillis();
        run();
        long endTime = System.currentTimeMillis();
        long runTime = endTime - startTime;
        System.out.println("当前程序执行时间 =====> " + (runTime) + "ms");
        System.out.println("当前程序执行时间 =====> " + (runTime / 1000) + "s");
        System.out.println("处理 supervisor_file 库结构结束执行=======================");
    }

    /**
     * 具体的处理方法
     * 跟节点id: 35e62184-9f64-11eb-899b-0050568bad7a
     */
    public void run(){
        // 查询第二级（12）
        List<SupervisorFile> parentList = itDicMapper.getFirst(new HashMap());
        log.info("第二级参数个数: " + parentList.size());

        // 所有文件夹
        SupervisorFile file = new SupervisorFile();
        List<SupervisorFile> allMenus = itFileMapper.selectFile(file);
        log.info("所有的文件： " + allMenus.size());

        for (int i = 0; i < parentList.size(); i++) {
            SupervisorFile supervisorFile = parentList.get(i);
            log.info("当前级数： " + (i + 1));
            supervisorFile.setPathKey(supervisorFile.getSuperiorId() + "," + supervisorFile.getId());// 给 search_key 拼接id路径
            //TODO 假装更新数据(先看下处理结果,再去操作库)
            itFileMapper.updatePathKeyById(supervisorFile.getId(),supervisorFile.getPathKey());
            log.info("path_key拼接后的数据(主)： " + supervisorFile.getPathKey());
            //使用递归拼接子孙节点的 search_key
            setChildsSearchKey(supervisorFile,allMenus,(i+1));
        }
    }

    /**
     * 使用递归拼接子孙节点的 search_key
     * @param menu 当前父级
     * @param allMenus 所有的数据
     */
    private void setChildsSearchKey(SupervisorFile menu, List<SupervisorFile> allMenus, int index) {
        index += 1;
        int sign = 0;
        for (int i = 0; i < allMenus.size(); i++){
            SupervisorFile childsMenu = allMenus.get(i);
            if (menu.getId().equals(childsMenu.getSuperiorId())){
                //这里就是子孙节点
                childsMenu.setPathKey(menu.getPathKey() + "," + childsMenu.getId());
                //TODO 假装更新数据(先看下处理结果,再去操作库)
                itFileMapper.updatePathKeyById(childsMenu.getId(),childsMenu.getPathKey());
                log.info("第 " + index + " 级，" + "path_key拼接后的数据（副）： " + childsMenu.getPathKey());
                setChildsSearchKey(childsMenu,allMenus,index);
            }
        }
    }


}
